{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Interpolating FIR filter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pylab as plt\n",
    "from scipy.signal import firwin\n",
    "from utils import *\n",
    "%matplotlib inline\n",
    "np.set_printoptions(precision=4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "PHASE = 5\n",
    "TAPS = 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "taps = firwin(TAPS*PHASE, 1/(PHASE))\n",
    "# scaling\n",
    "taps = taps * PHASE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# test signal\n",
    "FREQ = 5\n",
    "N1 = 32\n",
    "x = np.arange(0, 1, 1/N1)\n",
    "y = np.sin(x*2*np.pi*FREQ)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# interpolated signal\n",
    "# zero padding\n",
    "N2 = N1 * PHASE\n",
    "x_zero = np.arange(0, 1, 1/N2) - 1/N2*(PHASE-1)\n",
    "y_zero = np.zeros(N2)\n",
    "for i in range(N1):\n",
    "    y_zero[i*PHASE+PHASE-1] = y[i]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f17f9400198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_ideal = np.arange(0, 1, 1/1000)\n",
    "y_ideal = np.sin(x_ideal*2*np.pi*FREQ)\n",
    "plt.plot(x_ideal, y_ideal, label=\"ideal\")\n",
    "plt.plot(x, y, 'o', label=\"sampled\")\n",
    "plt.plot(x_zero, y_zero, '.', label=\"padded\")\n",
    "plt.xlim(0.4, 0.6)\n",
    "plt.grid()\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# fir filter\n",
    "y_interpolated = np.zeros(N2)\n",
    "for i in range(PHASE*TAPS, N2):\n",
    "    d = y_zero[i-PHASE*TAPS:i]\n",
    "    v = d * taps\n",
    "    y_interpolated[i] = np.sum(v)\n",
    "\n",
    "# delay compensation\n",
    "fir_delay = PHASE*TAPS//2 + 1\n",
    "x_interpolated = x_zero - 1/N2*fir_delay"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nxpwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f17f90717b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x_ideal, y_ideal, label=\"ideal\")\n",
    "plt.plot(x, y, 'o', label=\"sampled\")\n",
    "plt.plot(x_interpolated, y_interpolated, '.', label=\"FIR\")\n",
    "plt.xlim(0.4, 0.6)\n",
    "plt.grid()\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
